package config;

import java.io.File;
import java.io.IOException;

import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;

public class Log {
	private static String FILE_NAME = "log.txt";
	private static Log LOG;
	private static Appender APPENDER;
	private static Logger LOGGER;
	
	private Log(){
	}
	
	public void configure(String dirName) throws ConfigurationException{
		try{
			if (APPENDER == null){
//				BasicConfigurator.configure(); //habilita log no console
				
				//cria ou utiliza um diretorio de configuracao com o nome do canal
				File configDir = new File(dirName);
				if (!configDir.exists()){
					configDir.mkdir();
				}
				
				APPENDER = new FileAppender(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN), dirName + "/" + FILE_NAME);
				LOGGER.addAppender(APPENDER);
			}
		}catch (IOException e) {
			throw new ConfigurationException("Não foi possível configurar o Log no diretório: " + dirName, e);
		}
	}
	
	public Logger getLogger() throws ConfigurationException {
		if (APPENDER == null){
			throw new ConfigurationException("É necessário configurar o diretório de logs através do método configure()");
		}else{
			return LOGGER;
		}
	}
	
	public static Log getInstance(Class<?> clazz){
		if (LOG == null){
			LOG = new Log();
			LOGGER = Logger.getLogger(clazz);
			LOGGER.setLevel(Level.INFO);
		}
		return LOG;
	}
	
}

